{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-usermanager",
      "artifactVersion": "2021.53.3",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.audit.io",
          "org.nuxeo.ecm.default.config",
          "org.nuxeo.ecm.jwt",
          "org.nuxeo.ecm.permissions",
          "org.nuxeo.ecm.platform",
          "org.nuxeo.ecm.platform.api",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.convert",
          "org.nuxeo.ecm.platform.csv.export",
          "org.nuxeo.ecm.platform.dublincore",
          "org.nuxeo.ecm.platform.filemanager",
          "org.nuxeo.ecm.platform.htmlsanitizer",
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.threed",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.ecm.webdav",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "org.nuxeo.mongodb.audit",
          "org.nuxeo.search.ui",
          "org.nuxeo.usermapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform",
        "id": "grp:org.nuxeo.ecm.platform",
        "name": "org.nuxeo.ecm.platform",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2021.53"
      },
      "bundleId": "org.nuxeo.ecm.platform.usermanager",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.usermanager.UserService",
          "documentation": "\n    A service to interact with the list of users and groups of the platform.\n  \n",
          "documentationHtml": "<p>\nA service to interact with the list of users and groups of the platform.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "descriptors": [
                "org.nuxeo.ecm.platform.usermanager.UserManagerDescriptor"
              ],
              "documentation": "\n      Configure the userManager.\n      <p/>\n\n      The extension should use the format:\n      <code>\n    <userManager>\n        <users>\n            <directory>somedirectory</directory>\n            <emailField>mail</emailField>\n            <searchFields append=\"true\">\n                <substringMatchSearchField>first</substringMatchSearchField>\n                <exactMatchSearchField>last</exactMatchSearchField>\n            </searchFields>\n            <listingMode>tabbed</listingMode>\n            <anonymousUser id=\"Anonymous\">\n                <property name=\"firstName\">Anonymous</property>\n                <property name=\"lastName\">User</property>\n            </anonymousUser>\n            <virtualUser id=\"MyCustomAdministrator\" searchable=\"false\">\n                <password>secret</password>\n                <property name=\"firstName\">My Custom</property>\n                <property name=\"lastName\">Administrator</property>\n                <group>administrators</group>\n            </virtualUser>\n            <virtualUser id=\"MyCustomMember\" searchable=\"false\">\n                <password>secret</password>\n                <property name=\"firstName\">My Custom</property>\n                <property name=\"lastName\">Member</property>\n                <group>members</group>\n                <group>othergroup</group>\n                <propertyList name=\"listprop\">\n                    <value>item1</value>\n                    <value>item2</value>\n                </propertyList>\n            </virtualUser>\n            <virtualUser id=\"ExistingVirtualUser\" remove=\"true\"/>\n        </users>\n        <defaultAdministratorId>admin</defaultAdministratorId>\n        <administratorsGroup>myAdministrators</administratorsGroup>\n        <disableDefaultAdministratorsGroup>\n            false\n          </disableDefaultAdministratorsGroup>\n        <userSortField>sn</userSortField>\n        <userPasswordPattern>^[a-zA-Z0-9]{5,}$</userPasswordPattern>\n        <groups>\n            <directory>somegroupdir</directory>\n            <membersField>members</membersField>\n            <groupLabelField>grouplabel</groupLabelField>\n            <subGroupsField>subgroups</subGroupsField>\n            <parentGroupsField>parentgroup</parentGroupsField>\n            <listingMode>search_only</listingMode>\n            <searchFields append=\"true\">\n                <substringMatchSearchField>grouplabel</substringMatchSearchField>\n                <exactMatchSearchField>groupname</exactMatchSearchField>\n            </searchFields>\n        </groups>\n        <defaultGroup>members</defaultGroup>\n        <groupSortField>groupname</groupSortField>\n    </userManager>\n</code>\n<p/>\n\n      If the element anonymousUser has the attribute remove=\"true\", then the\n      anonymous user will be disabled. The anonymous user is searchable by\n      default.\n      <p/>\n\n      If a virtual user has the attribute remove=\"true\", it is removed from the\n      list of virtual users. Virtual users are searchable by default, but it is\n      not implemented yet... so you should keep the attribute searchable=\"false\"\n      to keep the same behaviour when it will be.\n      <p/>\n\n      Virtual users with the \"administrators\" group will have the same rights\n      than the default administrator.\n      <p/>\n\n      New administrators groups can be added using the \"administratorsGroup\"\n      tag. Several groups can be defined, adding as many tags as needed. The\n      default group named \"administrators\" can be disabled by setting the\n      \"disableDefaultAdministratorsGroup\" to \"true\" (defaults to false): only\n      new defined administrators groups will then be taken into account. Note\n      that disabling this default group should be done after setting up custom\n      rights in the repository, as this group is usually defined as the group of\n      users who have all permissions at the root of the repository.\n      <p/>\n\n      Anonymous and virtual users properties have to match the users directory\n      schema fields to be taken into account.\n      <p/>\n\n      The userPasswordPattern format is specified by java.util.regex.Pattern.\n      <p/>\n\n      The values for users listingMode are: \"all\", \"tabbed\", \"search_only\".\n      (These values are defined in\n      org.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n      <p/>\n\n      The values for groups listingMode are: \"all\" and \"search_only\".\n    \n",
              "documentationHtml": "<p>\nConfigure the userManager.\n</p><p>\nThe extension should use the format:\n</p><p></p><pre><code>    &lt;userManager&gt;\n        &lt;users&gt;\n            &lt;directory&gt;somedirectory&lt;/directory&gt;\n            &lt;emailField&gt;mail&lt;/emailField&gt;\n            &lt;searchFields append&#61;&#34;true&#34;&gt;\n                &lt;substringMatchSearchField&gt;first&lt;/substringMatchSearchField&gt;\n                &lt;exactMatchSearchField&gt;last&lt;/exactMatchSearchField&gt;\n            &lt;/searchFields&gt;\n            &lt;listingMode&gt;tabbed&lt;/listingMode&gt;\n            &lt;anonymousUser id&#61;&#34;Anonymous&#34;&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;Anonymous&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;User&lt;/property&gt;\n            &lt;/anonymousUser&gt;\n            &lt;virtualUser id&#61;&#34;MyCustomAdministrator&#34; searchable&#61;&#34;false&#34;&gt;\n                &lt;password&gt;secret&lt;/password&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;My Custom&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;Administrator&lt;/property&gt;\n                &lt;group&gt;administrators&lt;/group&gt;\n            &lt;/virtualUser&gt;\n            &lt;virtualUser id&#61;&#34;MyCustomMember&#34; searchable&#61;&#34;false&#34;&gt;\n                &lt;password&gt;secret&lt;/password&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;My Custom&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;Member&lt;/property&gt;\n                &lt;group&gt;members&lt;/group&gt;\n                &lt;group&gt;othergroup&lt;/group&gt;\n                &lt;propertyList name&#61;&#34;listprop&#34;&gt;\n                    &lt;value&gt;item1&lt;/value&gt;\n                    &lt;value&gt;item2&lt;/value&gt;\n                &lt;/propertyList&gt;\n            &lt;/virtualUser&gt;\n            &lt;virtualUser id&#61;&#34;ExistingVirtualUser&#34; remove&#61;&#34;true&#34;/&gt;\n        &lt;/users&gt;\n        &lt;defaultAdministratorId&gt;admin&lt;/defaultAdministratorId&gt;\n        &lt;administratorsGroup&gt;myAdministrators&lt;/administratorsGroup&gt;\n        &lt;disableDefaultAdministratorsGroup&gt;\n            false\n          &lt;/disableDefaultAdministratorsGroup&gt;\n        &lt;userSortField&gt;sn&lt;/userSortField&gt;\n        &lt;userPasswordPattern&gt;^[a-zA-Z0-9]{5,}$&lt;/userPasswordPattern&gt;\n        &lt;groups&gt;\n            &lt;directory&gt;somegroupdir&lt;/directory&gt;\n            &lt;membersField&gt;members&lt;/membersField&gt;\n            &lt;groupLabelField&gt;grouplabel&lt;/groupLabelField&gt;\n            &lt;subGroupsField&gt;subgroups&lt;/subGroupsField&gt;\n            &lt;parentGroupsField&gt;parentgroup&lt;/parentGroupsField&gt;\n            &lt;listingMode&gt;search_only&lt;/listingMode&gt;\n            &lt;searchFields append&#61;&#34;true&#34;&gt;\n                &lt;substringMatchSearchField&gt;grouplabel&lt;/substringMatchSearchField&gt;\n                &lt;exactMatchSearchField&gt;groupname&lt;/exactMatchSearchField&gt;\n            &lt;/searchFields&gt;\n        &lt;/groups&gt;\n        &lt;defaultGroup&gt;members&lt;/defaultGroup&gt;\n        &lt;groupSortField&gt;groupname&lt;/groupSortField&gt;\n    &lt;/userManager&gt;\n</code></pre><p>\nIf the element anonymousUser has the attribute remove&#61;&#34;true&#34;, then the\nanonymous user will be disabled. The anonymous user is searchable by\ndefault.\n</p><p>\nIf a virtual user has the attribute remove&#61;&#34;true&#34;, it is removed from the\nlist of virtual users. Virtual users are searchable by default, but it is\nnot implemented yet... so you should keep the attribute searchable&#61;&#34;false&#34;\nto keep the same behaviour when it will be.\n</p><p>\nVirtual users with the &#34;administrators&#34; group will have the same rights\nthan the default administrator.\n</p><p>\nNew administrators groups can be added using the &#34;administratorsGroup&#34;\ntag. Several groups can be defined, adding as many tags as needed. The\ndefault group named &#34;administrators&#34; can be disabled by setting the\n&#34;disableDefaultAdministratorsGroup&#34; to &#34;true&#34; (defaults to false): only\nnew defined administrators groups will then be taken into account. Note\nthat disabling this default group should be done after setting up custom\nrights in the repository, as this group is usually defined as the group of\nusers who have all permissions at the root of the repository.\n</p><p>\nAnonymous and virtual users properties have to match the users directory\nschema fields to be taken into account.\n</p><p>\nThe userPasswordPattern format is specified by java.util.regex.Pattern.\n</p><p>\nThe values for users listingMode are: &#34;all&#34;, &#34;tabbed&#34;, &#34;search_only&#34;.\n(These values are defined in\norg.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n</p><p>\nThe values for groups listingMode are: &#34;all&#34; and &#34;search_only&#34;.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/ExtensionPoints/org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "label": "userManager (org.nuxeo.ecm.platform.usermanager.UserService)",
              "name": "userManager",
              "version": "2021.53.3"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService",
          "name": "org.nuxeo.ecm.platform.usermanager.UserService",
          "requirements": [],
          "resolutionOrder": 566,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager",
              "id": "org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager",
              "overriden": false,
              "version": "2021.53.3"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.platform.usermanager.UserManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserManager",
              "overriden": false,
              "version": "2021.53.3"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.runtime.api.login.Authenticator",
              "id": "org.nuxeo.runtime.api.login.Authenticator",
              "overriden": false,
              "version": "2021.53.3"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider",
              "id": "org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider",
              "overriden": false,
              "version": "2021.53.3"
            }
          ],
          "startOrder": 906,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n\n  <documentation>\n    A service to interact with the list of users and groups of the platform.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.usermanager.UserService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager\"/>\n    <provide interface=\"org.nuxeo.ecm.platform.usermanager.UserManager\"/>\n    <provide interface=\"org.nuxeo.runtime.api.login.Authenticator\"/>\n    <provide interface=\"org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider\"/>\n  </service>\n\n  <extension-point name=\"userManager\">\n\n    <documentation>\n      Configure the userManager.\n      <p/>\n      The extension should use the format:\n      <code>\n        <userManager>\n          <users>\n            <directory>somedirectory</directory>\n            <emailField>mail</emailField>\n            <searchFields append=\"true\">\n              <substringMatchSearchField>first</substringMatchSearchField>\n              <exactMatchSearchField>last</exactMatchSearchField>\n            </searchFields>\n            <listingMode>tabbed</listingMode>\n            <anonymousUser id=\"Anonymous\">\n              <property name=\"firstName\">Anonymous</property>\n              <property name=\"lastName\">User</property>\n            </anonymousUser>\n            <virtualUser id=\"MyCustomAdministrator\" searchable=\"false\">\n              <password>********</password>\n              <property name=\"firstName\">My Custom</property>\n              <property name=\"lastName\">Administrator</property>\n              <group>administrators</group>\n            </virtualUser>\n            <virtualUser id=\"MyCustomMember\" searchable=\"false\">\n              <password>********</password>\n              <property name=\"firstName\">My Custom</property>\n              <property name=\"lastName\">Member</property>\n              <group>members</group>\n              <group>othergroup</group>\n              <propertyList name=\"listprop\">\n                <value>item1</value>\n                <value>item2</value>\n              </propertyList>\n            </virtualUser>\n            <virtualUser id=\"ExistingVirtualUser\" remove=\"true\"/>\n          </users>\n          <defaultAdministratorId>admin</defaultAdministratorId>\n          <administratorsGroup>myAdministrators</administratorsGroup>\n          <disableDefaultAdministratorsGroup>\n            false\n          </disableDefaultAdministratorsGroup>\n          <userSortField>sn</userSortField>\n          <userPasswordPattern>^[a-zA-Z0-9]{5,}$</userPasswordPattern>\n          <groups>\n            <directory>somegroupdir</directory>\n            <membersField>members</membersField>\n            <groupLabelField>grouplabel</groupLabelField>\n            <subGroupsField>subgroups</subGroupsField>\n            <parentGroupsField>parentgroup</parentGroupsField>\n            <listingMode>search_only</listingMode>\n            <searchFields append=\"true\">\n              <substringMatchSearchField>grouplabel</substringMatchSearchField>\n              <exactMatchSearchField>groupname</exactMatchSearchField>\n            </searchFields>\n          </groups>\n          <defaultGroup>members</defaultGroup>\n          <groupSortField>groupname</groupSortField>\n        </userManager>\n      </code>\n      <p/>\n      If the element anonymousUser has the attribute remove=\"true\", then the\n      anonymous user will be disabled. The anonymous user is searchable by\n      default.\n      <p/>\n      If a virtual user has the attribute remove=\"true\", it is removed from the\n      list of virtual users. Virtual users are searchable by default, but it is\n      not implemented yet... so you should keep the attribute searchable=\"false\"\n      to keep the same behaviour when it will be.\n      <p/>\n      Virtual users with the \"administrators\" group will have the same rights\n      than the default administrator.\n      <p/>\n      New administrators groups can be added using the \"administratorsGroup\"\n      tag. Several groups can be defined, adding as many tags as needed. The\n      default group named \"administrators\" can be disabled by setting the\n      \"disableDefaultAdministratorsGroup\" to \"true\" (defaults to false): only\n      new defined administrators groups will then be taken into account. Note\n      that disabling this default group should be done after setting up custom\n      rights in the repository, as this group is usually defined as the group of\n      users who have all permissions at the root of the repository.\n      <p/>\n      Anonymous and virtual users properties have to match the users directory\n      schema fields to be taken into account.\n      <p/>\n      The userPasswordPattern format is specified by java.util.regex.Pattern.\n      <p/>\n      The values for users listingMode are: \"all\", \"tabbed\", \"search_only\".\n      (These values are defined in\n      org.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n      <p/>\n      The values for groups listingMode are: \"all\" and \"search_only\".\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.usermanager.UserManagerDescriptor\"/>\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/UserService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.computedgroups.GroupComputerDescriptor",
                "org.nuxeo.ecm.platform.computedgroups.UserMetadataGroupComputerDescriptor",
                "org.nuxeo.ecm.platform.computedgroups.DocumentMetadataGroupComputerDescriptor"
              ],
              "documentation": "\n    Extension point to contribute a new class to compute virtual groups.\n\n    The contribution should be as the following example :\n    <code>\n    <groupComputer name=\"MyGroupComputerName\">\n        <computer>fullClassName</computer>\n    </groupComputer>\n</code>\n\n\n    The contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n\n    To simplify the Computer group generation you can also contribute a simple group computer without java\n    code contribution based on\n    <ul>\n    <li>user profile metadata (military grade given a abilitation level, for instance)</li>\n    <li>metadata given a list of documents (ex: local group)</li>\n</ul>\n\n\n    For the first case, you just have to contribute:\n    <code>\n    <userMetadataGroupComputer enabled=\"false\" groupPattern=\"grade_%s\"\n        name=\"grade_cg\" xpath=\"company\"/>\n</code>\n\n\n    Here for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\n    the company metadata stored into the user profile. If the company metadata is empty or contains only spaces\n    No group is affected to the user.\n\n    For the second possibility (metadata given a list of documents), you just have to contribute:\n    <code>\n    <documentMetadataGroupComputer groupPattern=\"creator_%s\"\n        name=\"creator_cg\" whereClause=\"dc:creator = '%s'\" xpath=\"dc:title\"/>\n</code>\n\n\n    Here, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\n    is the title of the document. But you can also try this:\n\n    <code>\n    <documentMetadataGroupComputer groupPattern=\"creator_%s\"\n        name=\"creator_cg\" whereClause=\"dc:creator = '%s'\" xpath=\"ecm:uuid\"/>\n</code>\n\n\n    Here, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\n    to have more information.\n\n    @author Thierry Delprat (td@nuxeo.com)\n    @author Benjamin JALON (bjalon@nuxeo.com)\n        \n",
              "documentationHtml": "<p>\nExtension point to contribute a new class to compute virtual groups.\n</p><p>\nThe contribution should be as the following example :\n</p><p></p><pre><code>    &lt;groupComputer name&#61;&#34;MyGroupComputerName&#34;&gt;\n        &lt;computer&gt;fullClassName&lt;/computer&gt;\n    &lt;/groupComputer&gt;\n</code></pre><p>\nThe contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n</p><p>\nTo simplify the Computer group generation you can also contribute a simple group computer without java\ncode contribution based on\n</p><ul><li>user profile metadata (military grade given a abilitation level, for instance)</li><li>metadata given a list of documents (ex: local group)</li></ul>\n<p>\nFor the first case, you just have to contribute:\n</p><p></p><pre><code>    &lt;userMetadataGroupComputer enabled&#61;&#34;false&#34; groupPattern&#61;&#34;grade_%s&#34;\n        name&#61;&#34;grade_cg&#34; xpath&#61;&#34;company&#34;/&gt;\n</code></pre><p>\nHere for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\nthe company metadata stored into the user profile. If the company metadata is empty or contains only spaces\nNo group is affected to the user.\n</p><p>\nFor the second possibility (metadata given a list of documents), you just have to contribute:\n</p><p></p><pre><code>    &lt;documentMetadataGroupComputer groupPattern&#61;&#34;creator_%s&#34;\n        name&#61;&#34;creator_cg&#34; whereClause&#61;&#34;dc:creator &#61; &#39;%s&#39;&#34; xpath&#61;&#34;dc:title&#34;/&gt;\n</code></pre><p>\nHere, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\nis the title of the document. But you can also try this:\n</p><p>\n</p><pre><code>    &lt;documentMetadataGroupComputer groupPattern&#61;&#34;creator_%s&#34;\n        name&#61;&#34;creator_cg&#34; whereClause&#61;&#34;dc:creator &#61; &#39;%s&#39;&#34; xpath&#61;&#34;ecm:uuid&#34;/&gt;\n</code></pre><p>\nHere, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\nto have more information.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "label": "computer (org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl)",
              "name": "computer",
              "version": "2021.53.3"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.computedgroups.GroupComputerChainDescriptor"
              ],
              "documentation": "\n    Extension point to set or update the chain of group computer.\n    The GroupComputers will be called sequentially according the chain definition.\n\n    The contribution should be of the form :\n    <code>\n    <groupComputerChain>\n        <computers>\n            <computer>companyGroupComputer</computer>\n            <computer>myOtherGroupComputer</computer>\n        </computers>\n    </groupComputerChain>\n</code>\n\n\n    By default, each contribution will completly overwrite the chain.\n    If you just want to add a new computer to the existing chain, set the append attribute to true.\n\n    <code>\n    <groupComputerChain append=\"true\">\n        <computers>\n            <computer>myAdditionnalGroupComputer</computer>\n        </computers>\n    </groupComputerChain>\n</code>\n\n\n    @author Thierry Delprat (td@nuxeo.com)\n        \n",
              "documentationHtml": "<p>\nExtension point to set or update the chain of group computer.\nThe GroupComputers will be called sequentially according the chain definition.\n</p><p>\nThe contribution should be of the form :\n</p><p></p><pre><code>    &lt;groupComputerChain&gt;\n        &lt;computers&gt;\n            &lt;computer&gt;companyGroupComputer&lt;/computer&gt;\n            &lt;computer&gt;myOtherGroupComputer&lt;/computer&gt;\n        &lt;/computers&gt;\n    &lt;/groupComputerChain&gt;\n</code></pre><p>\nBy default, each contribution will completly overwrite the chain.\nIf you just want to add a new computer to the existing chain, set the append attribute to true.\n</p><p>\n</p><pre><code>    &lt;groupComputerChain append&#61;&#34;true&#34;&gt;\n        &lt;computers&gt;\n            &lt;computer&gt;myAdditionnalGroupComputer&lt;/computer&gt;\n        &lt;/computers&gt;\n    &lt;/groupComputerChain&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "label": "computerChain (org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl)",
              "name": "computerChain",
              "version": "2021.53.3"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "requirements": [],
          "resolutionOrder": 567,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/Services/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService",
              "overriden": false,
              "version": "2021.53.3"
            }
          ],
          "startOrder": 858,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n\n    <implementation class=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\" />\n\n    <service>\n        <provide interface=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService\" />\n    </service>\n\n    <extension-point name=\"computer\">\n        <documentation>\n    Extension point to contribute a new class to compute virtual groups.\n\n    The contribution should be as the following example :\n    <code>\n        <groupComputer name=\"MyGroupComputerName\">\n            <computer>fullClassName</computer>\n        </groupComputer>\n    </code>\n\n    The contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n\n    To simplify the Computer group generation you can also contribute a simple group computer without java\n    code contribution based on\n    <ul>\n      <li>user profile metadata (military grade given a abilitation level, for instance)</li>\n      <li>metadata given a list of documents (ex: local group)</li>\n    </ul>\n\n    For the first case, you just have to contribute:\n    <code>\n      <userMetadataGroupComputer enabled=\"false\" xpath=\"company\" groupPattern=\"grade_%s\" name=\"grade_cg\"/>\n    </code>\n\n    Here for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\n    the company metadata stored into the user profile. If the company metadata is empty or contains only spaces\n    No group is affected to the user.\n\n    For the second possibility (metadata given a list of documents), you just have to contribute:\n    <code>\n      <documentMetadataGroupComputer xpath=\"dc:title\" whereClause=\"dc:creator = '%s'\" groupPattern=\"creator_%s\" name=\"creator_cg\"/>\n    </code>\n\n    Here, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\n    is the title of the document. But you can also try this:\n\n    <code>\n      <documentMetadataGroupComputer xpath=\"ecm:uuid\" whereClause=\"dc:creator = '%s'\" groupPattern=\"creator_%s\" name=\"creator_cg\"/>\n    </code>\n\n    Here, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\n    to have more information.\n\n    @author Thierry Delprat (td@nuxeo.com)\n    @author Benjamin JALON (bjalon@nuxeo.com)\n        </documentation>\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.GroupComputerDescriptor\" />\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.UserMetadataGroupComputerDescriptor\" />\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.DocumentMetadataGroupComputerDescriptor\" />\n\n    </extension-point>\n\n    <extension-point name=\"computerChain\">\n        <documentation>\n    Extension point to set or update the chain of group computer.\n    The GroupComputers will be called sequentially according the chain definition.\n\n    The contribution should be of the form :\n    <code>\n      <groupComputerChain>\n         <computers>\n           <computer>companyGroupComputer</computer>\n           <computer>myOtherGroupComputer</computer>\n         </computers>\n      </groupComputerChain>\n    </code>\n\n    By default, each contribution will completly overwrite the chain.\n    If you just want to add a new computer to the existing chain, set the append attribute to true.\n\n    <code>\n          <groupComputerChain append=\"true\">\n             <computers>\n               <computer>myAdditionnalGroupComputer</computer>\n             </computers>\n          </groupComputerChain>\n    </code>\n\n    @author Thierry Delprat (td@nuxeo.com)\n        </documentation>\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.GroupComputerChainDescriptor\" />\n    </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/computedgroups-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib/Contributions/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib--computer",
              "id": "org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib--computer",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"computer\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n        <groupComputer name=\"companyGroupComputer\">\n            <computer>org.nuxeo.ecm.platform.computedgroups.CompanyGroupComputer</computer>\n        </groupComputer>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib",
          "name": "org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib",
          "requirements": [],
          "resolutionOrder": 568,
          "services": [],
          "startOrder": 303,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib\">\n\n    <extension target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\"\n        point=\"computer\">\n        <groupComputer name=\"companyGroupComputer\">\n            <computer>org.nuxeo.ecm.platform.computedgroups.CompanyGroupComputer</computer>\n        </groupComputer>\n    </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/companycomputedgroups-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserManagerImpl/Contributions/org.nuxeo.ecm.platform.usermanager.UserManagerImpl--userManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserManagerImpl--userManager",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.usermanager.UserService",
                "name": "org.nuxeo.ecm.platform.usermanager.UserService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"userManager\" target=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n\n    <userManager class=\"org.nuxeo.ecm.platform.computedgroups.UserManagerWithComputedGroups\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
          "name": "org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
          "requirements": [],
          "resolutionOrder": 569,
          "services": [],
          "startOrder": 564,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.UserManagerImpl\">\n\n  <extension target=\"org.nuxeo.ecm.platform.usermanager.UserService\"\n    point=\"userManager\">\n\n    <userManager\n      class=\"org.nuxeo.ecm.platform.computedgroups.UserManagerWithComputedGroups\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/UserManagerImpl.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "Adapters for UserModel\n",
          "documentationHtml": "<p>\nAdapters for UserModel</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.adapter/Contributions/org.nuxeo.ecm.platform.usermanager.adapter--adapters",
              "id": "org.nuxeo.ecm.platform.usermanager.adapter--adapters",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.usermanager.UserAdapter\" factory=\"org.nuxeo.ecm.platform.usermanager.UserAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.adapter",
          "name": "org.nuxeo.ecm.platform.usermanager.adapter",
          "requirements": [],
          "resolutionOrder": 571,
          "services": [],
          "startOrder": 565,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.usermanager.adapter\">\n  <documentation>Adapters for UserModel</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.usermanager.UserAdapter\"\n      factory=\"org.nuxeo.ecm.platform.usermanager.UserAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Resolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\n    by 'user:' or 'group:'.\n  \n",
          "documentationHtml": "<p>\nResolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\nby &#39;user:&#39; or &#39;group:&#39;.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.resolver/Contributions/org.nuxeo.ecm.platform.usermanager.resolver--resolvers",
              "id": "org.nuxeo.ecm.platform.usermanager.resolver--resolvers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.ObjectResolverService",
                "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"resolvers\" target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\">\n    <resolver class=\"org.nuxeo.ecm.platform.usermanager.UserManagerResolver\" type=\"userManagerResolver\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.resolver",
          "name": "org.nuxeo.ecm.platform.usermanager.resolver",
          "requirements": [],
          "resolutionOrder": 572,
          "services": [],
          "startOrder": 569,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.usermanager.resolver\">\n  <documentation>\n    Resolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\n    by 'user:' or 'group:'.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" point=\"resolvers\">\n    <resolver type=\"userManagerResolver\" class=\"org.nuxeo.ecm.platform.usermanager.UserManagerResolver\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/usermanager-resolver-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.marshallers/Contributions/org.nuxeo.ecm.platform.usermanager.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.usermanager.marshallers--marshallers",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.marshallers",
          "name": "org.nuxeo.ecm.platform.usermanager.marshallers",
          "requirements": [],
          "resolutionOrder": 573,
          "services": [],
          "startOrder": 566,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Core IO registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonReader\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    \n",
              "documentationHtml": "<p>\nControls whether we check the validity of password when changing it.\n</p><p>\n&#64;since 8.4\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties/Contributions/org.nuxeo.ecm.platform.usermanager.properties--configuration",
              "id": "org.nuxeo.ecm.platform.usermanager.properties--configuration",
              "registrationOrder": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    </documentation>\n    <property name=\"nuxeo.usermanager.check.password\">********</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nControls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\nAPIs interpret the pattern as a generic string with arbitrary characters\nthat will be matched exactly (depending on the directory substring match style)\n(non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties/Contributions/org.nuxeo.ecm.platform.usermanager.properties--configuration1",
              "id": "org.nuxeo.ecm.platform.usermanager.properties--configuration1",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.usermanager.search.escape.compat\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties",
          "name": "org.nuxeo.ecm.platform.usermanager.properties",
          "requirements": [],
          "resolutionOrder": 574,
          "services": [],
          "startOrder": 568,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    </documentation>\n    <property name=\"nuxeo.usermanager.check.password\">********</property>\n  </extension>\n\n <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.usermanager.search.escape.compat\">false</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/usermanager-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.pageproviders/Contributions/org.nuxeo.ecm.platform.usermanager.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.usermanager.pageproviders--providers",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2021.53.3",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.UsersPageProvider\" name=\"users_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoPrincipalsPageProvider\" name=\"nuxeo_principals_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupsPageProvider\" name=\"groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoGroupsPageProvider\" name=\"nuxeo_groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberUsersPageProvider\" name=\"nuxeo_group_member_users_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberGroupsPageProvider\" name=\"nuxeo_group_member_groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.pageproviders",
          "name": "org.nuxeo.ecm.platform.usermanager.pageproviders",
          "requirements": [],
          "resolutionOrder": 575,
          "services": [],
          "startOrder": 567,
          "version": "2021.53.3",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"users_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.UsersPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_principals_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoPrincipalsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoGroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_group_member_users_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberUsersPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n    <genericPageProvider name=\"nuxeo_group_member_groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberGroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-usermanager-2021.53.3.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager",
      "id": "org.nuxeo.ecm.platform.usermanager",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: root\r\nBuild-Jdk: 11.0.22\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.platform.usermanager;core=split,org.nuxe\r\n o.ecm.platform.computedgroups\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateful\r\nBundle-Name: Nuxeo User Manager Module\r\nBundle-Localization: plugin\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/UserService.xml,OSGI-INF/computedgroups-fram\r\n ework.xml,OSGI-INF/companycomputedgroups-contrib.xml,OSGI-INF/UserMan\r\n agerImpl.xml,OSGI-INF/user-adapter-contrib.xml,OSGI-INF/usermanager-r\r\n esolver-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/userman\r\n ager-properties.xml,OSGI-INF/pageproviders-contrib.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.collection\r\n s,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.n\r\n uxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm\r\n .core.api.security,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.di\r\n rectory.api,org.nuxeo.ecm.platform.usermanager.exceptions,org.nuxeo.r\r\n untime,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nuxeo.runtim\r\n e.services.event\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.usermanager\r\n\r\n",
      "maxResolutionOrder": 575,
      "minResolutionOrder": 566,
      "packages": [],
      "requirements": [],
      "version": "2021.53.3"
    }
  ],
  "creationDate": 1714377120883,
  "key": "Nuxeo Platform-2021.53",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1714377120883,
  "version": "2021.53"
}